CloudWatch Events または Alarm で条件に一致したにも関わらず Amazon SNS トピックで通知が送信されないときの対処法
困っていた内容
CloudWatch Events または CloudWatch Alarm で条件に一致した場合に、ターゲットとして指定した Amazon SNS トピックで通知が送信されるように設定しました。
しかし、条件に一致しても Amazon SNS トピックで通知が送信されません。
CloudWatch メトリクスでは、当該の Amazon SNS トピック に FailedInvocations と Invocations に値が記録されておりました。
どう対応すればいいの?
以下の 2 点を確認してください。
Amazon SNS トピックのアクセスポリシー
Amazon SNS トピックのアクセスポリシーに、CloudWatch サービスから SNS トピックにメッセージを発行することが許可されているかをご確認ください。
なお、デフォルトでは同一アカウントからのサービスから、SNS トピックにメッセージを発行することは許可されています。
Amazon SNS トピックのアクセスポリシーのデフォルト
{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SNS:GetTopicAttributes", "SNS:SetTopicAttributes", "SNS:AddPermission", "SNS:RemovePermission", "SNS:DeleteTopic", "SNS:Subscribe", "SNS:ListSubscriptionsByTopic", "SNS:Publish", "SNS:Receive" ], "Resource": "arn:aws:sns:<リージョン>:<アカウント ID>:<SNS トピック名>", "Condition": { "StringEquals": { "AWS:SourceOwner": "<アカウント ID>" } } } ] }
デフォルトから変更した場合は、以下の例のように CloudWatch サービスから、SNS トピックにメッセージを発行することが許可されているかをご確認ください。
例
{ "Sid": "Allow_Publish_Alarms", "Effect": "Allow", "Principal": { "Service": [ "cloudwatch.amazonaws.com" ] }, "Action": "sns:Publish", "Resource": "arn:aws:sns:<リージョン>:<アカウント ID>:<SNS トピック名>" }
Amazon SNS トピックの暗号化
SNS トピック AWS Key Management Service (KMS) キー「alias/aws/sns」がこの暗号化に使用されている場合、CloudWatch アラームはメッセージを SNS トピックに発行できません。
この場合、暗号化を無効化するか、顧客管理型 CMK をご利用ください。
顧客管理型 CMK には、キーポリシーのステートメントセクションに次のアクセス許可が含まれている必要があります。
例
{ "Sid": "Allow_CloudWatch_for_CMK", "Effect": "Allow", "Principal": { "Service":[ "cloudwatch.amazonaws.com" ] }, "Action": [ "kms:Decrypt","kms:GenerateDataKey" ], "Resource": "*" }
参考資料
CloudWatch アラームトリガーの SNS 通知を受信する際の問題を解決する
テクニカルサポートノートとは?
クラスメソッドのカルチャー(CLP) の「情報発信を通じて、全ての人々の創造活動に貢献し続ける」という考えから、クラスメソッド メンバーズをご利用のお客様よりいただいたお問い合わせより、他の AWS ユーザーにとっても 有益な情報を一般的な TIPS としてご紹介しています。